From 85cbac388ebe141eb1e423ee4e8b124b55641f3a Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Tue, 22 Aug 2006 14:42:05 -0600 Subject: [PATCH] [IA64] Add support for sending event channel interrupts to VT-i guest Signed-off-by: Tsunehisa Doi Signed-off-by: Tomonari Horikoshi --- xen/arch/ia64/vmx/vmx_process.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/xen/arch/ia64/vmx/vmx_process.c b/xen/arch/ia64/vmx/vmx_process.c index e36d81820d..b56d8e7665 100644 --- a/xen/arch/ia64/vmx/vmx_process.c +++ b/xen/arch/ia64/vmx/vmx_process.c @@ -186,6 +186,7 @@ void leave_hypervisor_tail(struct pt_regs *regs) { struct domain *d = current->domain; struct vcpu *v = current; + int callback_irq; // FIXME: Will this work properly if doing an RFI??? if (!is_idle_domain(d) ) { // always comes from guest // struct pt_regs *user_regs = vcpu_regs(current); @@ -213,6 +214,13 @@ void leave_hypervisor_tail(struct pt_regs *regs) // v->arch.irq_new_pending = 1; // } + callback_irq = d->arch.hvm_domain.params[HVM_PARAM_CALLBACK_IRQ]; + if (callback_irq != 0 && local_events_need_delivery()) { + /*inject para-device call back irq*/ + v->vcpu_info->evtchn_upcall_mask = 1; + vmx_vcpu_pend_interrupt(v, callback_irq); + } + if ( v->arch.irq_new_pending ) { v->arch.irq_new_pending = 0; v->arch.irq_new_condition = 0; -- 2.30.2